package com.atguigu.exam.exception;

import com.atguigu.exam.common.Result;

import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

//@ControllerAdvice 结合 @ExceptionHandler 注解，统一捕获所有 @Controller 或 @RestController 抛出的异常
//@ControllerAdvice 注解的类之所以能被注入到 Spring 容器中，核心原因是它的底层被 @Component 注解标注了。

@RestControllerAdvice//@ControllerAdvice + @ResponseBody
public class GlobalExceptionHandler {
    //处理异常的方法
    @ExceptionHandler(value = Exception.class)
    //通用异常（Exception）
//    这些异常通常是系统级错误，或未被业务代码显式处理的意外错误。
//    它们的核心信息只有 e.getMessage()（异常消息，如 “空指针异常”“文件不存在”）
//    ，没有业务相关的 “错误码”。
    public Result doResolveException(Exception e){
        e.printStackTrace();
        return Result.error(e.getMessage());
    }

    //处理ExamException异常的方法
    //自定义业务异常（ExamException）
    @ExceptionHandler(value = ExamException.class)
    public Result doResolveExamException(ExamException e){
        e.printStackTrace();
        return Result.error(e.getCode(),e.getMsg());
    }
}
